var querystring = require("querystring"),
    fs = require("fs");

function start(response, postData){
  console.log("Request handler 'start' was called.");

  var body ='<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" '+
    'content="text/html; charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';

    response.writeHead(200,{"Content-Type":"text/html"});
    response.write(body);
    response.end();
}

function upload(response, postData){
  console.log("Request handler 'upload' was called.");
  response.writeHead(200,{"Content-Type":"text/plain"});
  response.write("You've sent the text: "+
  querystring.parse(postData).text);
  response.end();
}

function show(response, postData){
  console.log("Request handler 'show' was called.");
  fs.readFile("/tmp/test.png","binary",function(error, file){
    if(error){
      response.writeHead(500,{"Content-Type":"text/plain"});
      response.write(error +"\n");
      response.end();
    }else{
      response.writeHead(200,{"Content-Type":"image/png"});
      response.write(file,"binary");
      response.end();
    }
  });
}

exports.start = start;
exports.upload = upload;
exports.show = show;



//阻塞非阻塞
//var exec = require("child_process").exec;

// function start(response){
//   console.log("Request handler 'start' was called.");

//   exec("ls -lah",function(error, stdout, stderr){
//       function sleep(milliSeconds){
//       var startTime =new Date().getTime();
//       while(new Date().getTime()< startTime + milliSeconds);
//     }

//     sleep(10000); 
//     response.writeHead(200,{"Content-Type":"text/plain"});
//     response.write(stdout);
//     response.end();
//   });
  
//以上/start处理程序中耗时的操作不会阻塞对/upload请求作出立即响应
// exec 异步回调  费时操作（io操作）会另开线程 不会在主线程做
// 对于Node.js来说，它是这样处理的：“嘿，probablyExpensiveFunction()
// （译者注：这 里指的就是需要花时间处理的函数），你继续处理你的事情，我（Node.js线程）先不等你了，
// 我继续去处理你后面的代码，请你提供一个 callbackFunction()，等你处理完之后我会去调用该回调函数的，谢谢！”
//}


// function start(){
//   console.log("Request handler 'start' was called.");

//   function sleep(milliSeconds){
//     var startTime =new Date().getTime();
//     while(new Date().getTime()< startTime + milliSeconds);
//   }

//   sleep(10000); //这里在做很费时间的事情 阻塞了主线程 使node不能处理下一个请求
//   return"Hello Start";
// }

// function upload(){
//   console.log("Request handler 'upload' was called.");
//   return"Hello Upload";
// }
// 表现： /start URL加载花了10秒，这和我们预期的一样。但是，/upload URL居然也花了10秒，而它在对应的请求处理程序中并没有类似于sleep()这样的操作！

// 这到底是为什么呢？原因就是start()包含了阻塞操作。形象的说就是“它阻塞了所有其他的处理工作”。



